package com.wh.wisdomsite.xbox.server.controller.st;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.wh.wisdomsite.xbox.common.util.ResManager;
import com.wh.wisdomsite.xbox.st.entity.Material;
import com.wh.wisdomsite.xbox.st.service.IMaterialService;
import com.wh.wisdomsite.xbox.utils.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 物料Controller
 * @author 刘旭
 * @version V1.0
 * @Package com.wh.wisdomsite.xbox.server.controller.st
 * @date 2018年12月24日 14:57
 * @Copyright 企业版权所有
 * @Company 贵州万华科技有限公司Copyright (c) 2018
 */
@Controller
@RequestMapping(value = "/material")
public class MaterialController {
    private static final Log logger = LogFactory.getLog(MaterialController.class);

    @Autowired
    private IMaterialService iMaterialService;

    /**
     * 根据名称查询物料信息（模糊查询，若之后为了性能需求，需要修改成先查询redis中的数据，若redis中无数据，则访问数据库获取，获取之后再缓存在redis中。目前暂时是直接从数据库中查询）
     * @param response
     * @param materialName
     * @author 丁奕
     */
    @RequestMapping(value = "/findMaterial", method = RequestMethod.POST)
    public void findMaterial(HttpServletResponse response, String materialName,String coId) {
        try{
            //设置条件
            logger.info("查询物料信息，获取下拉框选项-->>开始");
            EntityWrapper<Material> ewMaterial = new EntityWrapper<>();
            ewMaterial.setEntity(new Material());
            if(StringUtils.isNotEmpty(coId)){
                ewMaterial.eq("cod.coId",coId);
            }
            if(StringUtils.isNotEmpty(materialName)){
                ewMaterial.like("ma.materialName", materialName);
            }
            ewMaterial.groupBy("ma.maId");
            ewMaterial.orderBy("ma.materialName", true);
            //根据条件查询出所有的公共字典，为下拉选框提供数据
            List<Map<String,Object>> materialList = iMaterialService.getMapsByConditon(ewMaterial);
            JSONArray array = new JSONArray();
            if (materialList.size() > 0) {
                for (Map<String,Object> material : materialList) {
                    JSONObject object = new JSONObject(material);
                    object.put("materialInfo", material.get("materialName") + "(" + material.get("standardType") + ")");
                    array.put(object);
                }
            }
            ResManager.getJsonOut(response).print(array);
            logger.info("查询物料信息，获取下拉框选项-->>结束");
        }catch (Exception e){
            e.printStackTrace();
            logger.error("查询物料信息，获取下拉框选项-->>Exception" + e.getMessage());
        }
    }
}
